<?php
/**
 * Controller de Alertas de Clientes.
 *
 *
 * @filesource          
 * @copyright		
 * @link		http://www.pragmatia.com Pragmatia
 * @package		datagro
 * @subpackage	app.controllers
 * @version     1.1
 * @license		http://www.opensource.org/licenses/mit-license.php The MIT License
 * @author      Martin Radosta <mradosta@pragmatia.com>
 */

/**
 * Clase AlertasClientesController
 *
 * @package	    datagro
 * @subpackage	app.controllers
 */

class AlertasClientesController extends AppController
{
    var $name = 'AlertasClientes';
	var $uses = array("AlertasCliente", "Dominio", "Etiqueta", "Parametro");
	var $components = array('Mailer'); 

/**
 * Configurar.
 *35
 */
    function add() {

		if($this->Session->check('Sim')) {
			$sim = $this->Session->read('Sim');
		}
		else {
			$this->Session->setFlash('Debe seleccionar un Modulo antes de continuar.', 'error');
			$this->redirect("../sims/seleccionar", null, true);
		}

		$usuario = $this->Session->read('Usuario');
		if(!empty($this->data) && isset($this->data['AlertasCliente']['accion']) && ($this->data['AlertasCliente']['accion'] == "grabar" || $this->data['AlertasCliente']['accion'] == "cancelar")) {
			if ($this->data['AlertasCliente']['accion'] == "grabar") {
				$this->data['AlertasCliente']['estado'] = "Vigente";
				if($this->AlertasCliente->create($this->data) && $this->AlertasCliente->validates()) {
					$this->__parsearData();

					if($this->AlertasCliente->save($this->data))
						$this->Session->setFlash('La alerta se agrego correctamente.', 'ok');
					else
						$this->Session->setFlash('No fue posible agregar la nueva alerta.', 'error');	
					$this->redirect("index", null, true);
				}
			}
			elseif ($this->data['AlertasCliente']['accion'] == "cancelar") {
				$this->redirect("index", null, true);
			}
		}
		$tipos = array();
		$etiquetas_carga = $this->Etiqueta->findAll(array("Etiqueta.tipo_suceso"=>'like %"9"%', "Etiqueta.equipo_id"=>$sim['Sim']['equipo_id']));
		if(!empty($etiquetas_carga))
			$tipos[9] = 9;
		$this->set('etiquetas_carga', $etiquetas_carga);
		$etiquetas_descarga = $this->Etiqueta->findAll(array("Etiqueta.tipo_suceso"=>'like %"10"%', "Etiqueta.equipo_id"=>$sim['Sim']['equipo_id']));
		if(!empty($etiquetas_descarga))
			$tipos[10] = 10;
		$this->set('etiquetas_descarga', $etiquetas_descarga);
		$etiquetas_cierre = $this->Etiqueta->findAll(array("Etiqueta.tipo_suceso"=>'like %"11"%', "Etiqueta.equipo_id"=>$sim['Sim']['equipo_id']));
		if(!empty($etiquetas_cierre))
			$tipos[11] = 11;
		$this->set('etiquetas_cierre', $etiquetas_cierre);

		$tipo_equipo = "34";
		if(empty($tipos)) {
			//veo si es un sim de monitor, (tipo 35) 
			$monitor = $this->AlertasCliente->Sim->findAll(array("Sim.equipo_id"=>$sim['Sim']['equipo_id'], "Equipo.tipo"=>35));
			if(empty($monitor)) {
				$this->Session->setFlash('No es posible definir una alerta para el modulo seleccionado.', 'ok');
				$this->redirect("index", null, true);
			}
			else {
				$tipo_equipo = "35";
				//$parametros = $this->Parametro->generateList(array("Parametro.tipo"=>"E"), null, null, null, "{n}.Parametro.nombre");
				$parametros = $this->Parametro->findAll(array("Parametro.tipo"=>"E"), null, null, null, "{n}.Parametro.nombre");
				foreach($parametros as $k=>$v) {
					if($v['Parametro']['tipo'] == "E") {
						$tmpE[$k]['Etiqueta']['id'] = $v['Parametro']['id'];
						$tmpE[$k]['Etiqueta']['nombre'] = $v['Parametro']['nombre'];
						$tmpE[$k]['Etiqueta']['ayuda'] = $v['Parametro']['unidad'];
						$tmpE[$k]['Etiqueta']['tipo_dato'] = $v['Parametro']['tipo_dato'];
					}
				}
				$this->set('parametrosE', $tmpE);
				$parametros = $this->Parametro->generateList(array("Parametro.tipo"=>"D", "Parametro.alerta"=>1), null, null, null, "{n}.Parametro.nombre");
				$this->set('parametrosD', $parametros);
				$unidades = $this->Parametro->generateList(null, null, null, null, "{n}.Parametro.unidad");
				$this->set('unidades', $unidades);
				$tipos_datos = $this->Parametro->generateList(null, null, null, null, "{n}.Parametro.tipo_dato");
				$this->set('tipos_datos', $tipos_datos);
			}
		}

		$tipos_sucesos = $this->Dominio->generateList(array("nombre"=>"tipo_suceso"), null, null, null, "{n}.Dominio.valor");
		$tipos_sucesos = array_intersect_key($tipos_sucesos, $tipos);

		$this->set('sim', $sim);
		$this->set('tipo_equipo', $tipo_equipo);
		$this->set('tipos_sucesos', $tipos_sucesos);		
		$this->set('tipos_notificaciones', $this->Dominio->generateList(array("nombre"=>"tipo_notificacion"), null, null, null, "{n}.Dominio.valor"));
	}


function __enviarAlerta($n) {
	if($n['notificacion'] == "8" && $n['enviarPrueba']) {
		$this->Mailer->From = "alertas@datagro.com.ar";
		$this->Mailer->FromName = "Alertas - DataAgro";
		$this->Mailer->AddAddress($n['destino']);
		$this->Mailer->Subject = "Esta es una alerta de prueba";
		$this->Mailer->Body = "<b>Si esta leyendo este correo significa que su alerta esta correctamente configurada.</b>";
		$this->Mailer->IsHTML (true);
		 
		$this->Mailer->IsSMTP();
		$this->Mailer->Host     = "smtp.pragmatia.com.ar";
		$this->Mailer->Mailer   = "smtp";

		$this->Mailer->SMTPAuth = true;
		$this->Mailer->Username = 'postmaster@datagro.com.ar';
		$this->Mailer->Password = 'data8877';

		if(!$this->Mailer->Send()) {
			echo 'Error: ' . $this->Mailer->ErrorInfo;
		}
	}
	elseif($n['notificacion'] == "7" && $n['enviarPrueba']) {

		for($ii=1; $ii<=10; $ii++) {
			$filename = APP . "webroot" . DS . "files" . DS . "alerta_sin_enviar" . $ii;

			if (!file_exists($filename)) {
				break;
			}
			else {
				$filename = null;
			}
		}

		if(!empty($filename)) {
			$sms = $n['destino'] . "|Datagro - Alertas, Si esta leyendo este sms significa que su alerta esta correctamente configurada.";
			file_put_contents($filename, $sms);
		}
		/*
		$modem = fopen("/usr/local/apache2/htdocs/datagro.com.ar/ttyS0", "r+");
		stream_set_timeout($modem, 4); 

		if (!$modem){ 
			echo "No es posible abrir el modem."; 
		} 

		fputs($modem,'AT+CMGF=1' . "\r\n"); 
		$buffer = fgets($modem, 32); 

		fputs($modem,'AT+CMGS=' . $n['destino'] . "\r"); 
		$buffer = fgets($modem, 32); 

		fputs($modem, 'Datagro - Alerta' . "\r"); 
		fputs($modem, 'Si esta leyendo este sms significa que su alerta esta correctamente configurada.'. "\r"); 
		fputs($modem, chr(26) . "\r"); 
		$buffer = fgets($modem, 32);
		*/
	} 
}

/**
 * Index.
 *
 */
    function index() {
    
		if($this->Session->check('Sim')) {
			$sim = $this->Session->read('Sim');
			$this->data['Filtro']['AlertasCliente-sim_id'] = $sim['Sim']['id'];
		}
		else {
			$this->Session->setFlash('Debe seleccionar un Modulo antes de continuar.', 'error');
			$this->redirect("../sims/seleccionar", null, true);
		}
		    
		$usuario = $this->Session->read('Usuario');

		if ($usuario['Grupo']['id'] != 1) { // si no es un administrador
			if(empty($usuario['Usuario']['usuario_id'])) //es un padre, ve todos los sucesos de el y de sus hijos
			{
				$this->data['Filtro']['AlertasCliente-usuario_id'] = $usuario['Usuario']['id'];
			}
		}

		if(!empty($this->data))
		{
			$condicion = $this->Filtro->generarCondicion($this->data['Filtro']);
			$this->paginate['conditions'] = $condicion;
		}

		$this->set('registros', $this->paginate());
		$usuario = $this->Session->read('Usuario');
		$this->set('tipos_notificaciones', $this->Dominio->generateList(array("nombre"=>"tipo_notificacion"), null, null, null, "{n}.Dominio.valor"));	
		$tipos_sucesos = $this->Dominio->generateList(array("nombre"=>"tipo_suceso"), null, null, null, "{n}.Dominio.valor");

		$tipos = array();
		$etiquetas_carga = $this->Etiqueta->findAll(array("Etiqueta.tipo_suceso"=>'like %"9"%', "Etiqueta.equipo_id"=>$sim['Sim']['equipo_id']));
		if(!empty($etiquetas_carga))
			$tipos[9] = 9;
		$etiquetas_descarga = $this->Etiqueta->findAll(array("Etiqueta.tipo_suceso"=>'like %"10"%', "Etiqueta.equipo_id"=>$sim['Sim']['equipo_id']));
		if(!empty($etiquetas_descarga))
			$tipos[10] = 10;
		$etiquetas_cierre = $this->Etiqueta->findAll(array("Etiqueta.tipo_suceso"=>'like %"11"%', "Etiqueta.equipo_id"=>$sim['Sim']['equipo_id']));
		if(!empty($etiquetas_cierre))
			$tipos[11] = 11;
					
		$tipos_sucesos = array_intersect_key($tipos_sucesos, $tipos);
		$this->set('tipos_sucesos', $tipos_sucesos);
    }


/**
 * View.
 *
 */
   function view($id = false) 
   {
        if ($id && is_numeric($id))
        {
			$this->set('tipos_sucesos', $this->Dominio->generateList(array("nombre"=>"tipo_suceso"), null, null, null, "{n}.Dominio.valor"));		
			$this->set('tipos_notificaciones', $this->Dominio->generateList(array("nombre"=>"tipo_notificacion"), null, null, null, "{n}.Dominio.valor"));	

			$usuario = $this->Session->read('Usuario');
			$clientes = $this->AlertasCliente->Usuario->generateList(array("Usuario.usuario_id"=>$usuario['Usuario']['id']), null, null, null, "{n}.Usuario.nombre");
			$this->set('clientes', $clientes);	

			$this->set('etiquetas', $this->Etiqueta->generateList(null, null, null, null, "{n}.Etiqueta.nombre"));
			$this->set('parametros', $this->Parametro->generateList(null, null, null, null, "{n}.Parametro.nombre"));
            $this->data = $this->AlertasCliente->read(null, $id);
        }
   }  


/**
 * Bloquear.
 *
 */
	function bloquear($id = false) {
		if ($id && is_numeric($id)) {
			if($this->AlertasCliente->save(array("id"=>$id, "estado" => "No Vigente")))
				$this->Session->setFlash('La alerta se bloqueo correctamente.', 'ok');
			else
				$this->Session->setFlash('No fue posible bloquear alerta.', 'error');	
			$this->redirect("index", null, true);
		}
	}

/**
 * DesBloquear.
 *
 */
	function desbloquear($id = false) {
		if ($id && is_numeric($id)) {
		
			$alerta = $this->AlertasCliente->find(array("AlertasCliente.id"=>$id));
			$save = array("id"=>$id, "estado" => "Vigente");
			if($alerta['AlertasCliente']['fecha_vigencia_desde'] >= date("Y-m-d H:m:s")) {
				$save['fecha_vigencia_desde'] = date("Y-m-d H:m:s");
			}
			if($this->AlertasCliente->save($save)) {
				$alerta = $this->AlertasCliente->find(array("AlertasCliente.id"=>$id));
				if($alerta['AlertasCliente']['fecha_vigencia_hasta'] >= date("Y-m-d H:m:s")) {
					$this->Session->setFlash('La alerta se desbloqueo correctamente.', 'ok');
				}
				else
					$this->Session->setFlash('La alerta no pudo desbloquearse porque no esta vencida.', 'error');
			}
			else
				$this->Session->setFlash('No fue posible desbloquear alerta.', 'error');	
			$this->redirect("index", null, true);
		}
	}

/**
 * Edit.
 *
 */
   function edit($id, $renombrarModulo=false) {
		$usuario = $this->Session->read('Usuario');
		if(!empty($this->data) && isset($this->data['AlertasCliente']['accion']) && ($this->data['AlertasCliente']['accion'] == "grabar" || $this->data['AlertasCliente']['accion'] == "cancelar")) {
			if($this->data['AlertasCliente']['accion'] == "grabar") {
				if($this->AlertasCliente->create($this->data) && $this->AlertasCliente->validates())
				{
					$this->__parsearData();
					if($this->AlertasCliente->save($this->data))
						$this->Session->setFlash('La alerta se agrego correctamente.', 'ok');
					else
						$this->Session->setFlash('No fue posible agregar la nueva alerta.', 'error');	
					$this->redirect("index", null, true);

				}
				else {
					$this->set('etiquetas_carga', $this->Etiqueta->findAll(array("Etiqueta.tipo_suceso"=>'like %"9"%')));
					$this->set('etiquetas_descarga', $this->Etiqueta->findAll(array("Etiqueta.tipo_suceso"=>'like %"10"%')));
					$this->set('etiquetas_cierre', $this->Etiqueta->findAll(array("Etiqueta.tipo_suceso"=>'like %"11"%')));

					$this->set('tipos_sucesos', $this->Dominio->generateList(array("nombre"=>"tipo_suceso"), null, null, null, "{n}.Dominio.valor"));		
					$this->set('tipos_notificaciones', $this->Dominio->generateList(array("nombre"=>"tipo_notificacion"), null, null, null, "{n}.Dominio.valor"));	

					$clientes = $this->AlertasCliente->Usuario->generateList(array("Usuario.usuario_id"=>$usuario['Usuario']['id']), null, null, null, "{n}.Usuario.nombre");
					$this->set('clientes', $clientes);	
					$this->render('add');
				}
			}
			elseif($this->data['AlertasCliente']['accion'] == "cancelar") {
				$this->redirect("index", null, true);
			}
		}
		else {
			$this->data = $this->AlertasCliente->read(null, $id);
			$tmp = unserialize($this->data['AlertasCliente']['contenido']);
			foreach($tmp as $k=>$v) {
				$this->data['AlertasClienteContenido']['contenido_' . $this->data['AlertasCliente']['tipo_suceso'] . '_' . $v['etiqueta']] = $v['valor'];
				$this->data['AlertasClienteContenido']['contenido_operador_' . $this->data['AlertasCliente']['tipo_suceso'] . '_' . $v['etiqueta']] = $v['operador'];
			}

			$this->set('etiquetas_carga', $this->Etiqueta->findAll(array("Etiqueta.tipo_suceso"=>'like %"9"%')));
			$this->set('etiquetas_descarga', $this->Etiqueta->findAll(array("Etiqueta.tipo_suceso"=>'like %"10"%')));
			$this->set('etiquetas_cierre', $this->Etiqueta->findAll(array("Etiqueta.tipo_suceso"=>'like %"11"%')));

			$this->set('tipos_sucesos', $this->Dominio->generateList(array("nombre"=>"tipo_suceso"), null, null, null, "{n}.Dominio.valor"));		
			$this->set('tipos_notificaciones', $this->Dominio->generateList(array("nombre"=>"tipo_notificacion"), null, null, null, "{n}.Dominio.valor"));	

			$clientes = $this->AlertasCliente->Usuario->generateList(array("Usuario.usuario_id"=>$usuario['Usuario']['id']), null, null, null, "{n}.Usuario.nombre");
			$this->set('clientes', $clientes);	

			$c=0;
			foreach($this->data['AlertasClienteNotificacion'] as $k=>$v) {
				if(isset($v['notificacion']) && isset($v['destino'])) {
					$c++;
					$this->data['AlertasCliente']['notificacion' . $c] = $v['notificacion'];
					$this->data['AlertasCliente']['destino' . $c] = $v['destino'];
				}
			}
			$this->render('add');
		}   
   }    

/* parsea la informacion que postea el formulario y la deja lista para ser guardada
*/
	function __parsearData() {
		$usuario = $this->Session->read('Usuario');
		$this->Formato->formatearFechaHora();

		if(isset($this->data['AlertasCliente']['tipo_suceso'])) {
			//Balanzas
			$tipo_suceso = $this->data['AlertasCliente']['tipo_suceso'];
			
			//elimino las etiquetas no seleccionadas
			$valores_tmp = $valores = array();
			foreach($this->data['AlertasClienteContenido'] as $k=>$v) {
				if(substr($k, 0, 19) == "contenido_operador_") {
					$tmp = explode("_", $k);
					if($tmp[2] == $tipo_suceso)
					{
						$valores_tmp[$tmp[3]]['etiqueta'] = $tmp[3];
						$valores_tmp[$tmp[3]]['operador'] = $v;
					}
					unset($this->data['AlertasClienteContenido'][$k]);
				}
				elseif(substr($k, 0, 10) == "contenido_") {
					$tmp = explode("_", $k);
					if($tmp[1] == $tipo_suceso) {
						if(!empty($v))
							$valores_tmp[$tmp[2]]['valor'] = $v;
						else
							unset($valores_tmp[$tmp[2]]);
					}
					unset($this->data['AlertasClienteContenido'][$k]);
				}
			}//for each
		}
		else {
			//monitor
					//d($this->data);
			foreach($this->data['AlertasClienteContenido'] as $k=>$v) {
			
				if(substr($k, 0, 21) == "contenido_operador_0_") {
					$parametro_id = str_replace("contenido_operador_0_", "", $k);
					if(!empty($this->data['AlertasClienteContenido']['contenido_0_' . $parametro_id])) {
						$valores_tmp[$parametro_id]['etiqueta'] = $parametro_id;
						$valores_tmp[$parametro_id]['operador'] = $v;
						$valores_tmp[$parametro_id]['valor'] = $this->data['AlertasClienteContenido']['contenido_0_' . $parametro_id];
					}
				}
				elseif(substr($k, 0, 18) == "contenido_detalle_") {
					$idP = str_replace("contenido_detalle_", "", $k);
					if(!empty($v)) {
						$valores_tmp[$idP]['etiqueta'] = $idP;
						$valores_tmp[$idP]['valor'] = $v;
						$valores_tmp[$idP]['operador'] = $this->data['AlertasClienteContenido']['contenido_operador_detalle_' . $idP];
					}
				}
				elseif(!empty($this->data['AlertasClienteContenido']['contenido_detalle']) &&
					!empty($this->data['AlertasClienteContenido']['contenido_operador_detalle']) &&
					(!empty($this->data['AlertasClienteContenido']['contenido_14']) || !empty($this->data['AlertasClienteContenido']['contenido_16']))) {
					$valores_tmp[$k]['etiqueta'] = $this->data['AlertasClienteContenido']['contenido_detalle'];
					$valores_tmp[$k]['operador'] = $this->data['AlertasClienteContenido']['contenido_operador_detalle'];
					if(!empty($this->data['AlertasClienteContenido']['contenido_14']))
						$valores_tmp[$k]['valor'] = $this->data['AlertasClienteContenido']['contenido_14'];
					else
						$valores_tmp[$k]['valor'] = $this->data['AlertasClienteContenido']['contenido_16'];
					break;
				}
			}
		}
		
		foreach($valores_tmp as $v)
			$valores[] = $v;
		
		if(!empty($valores)) {
			$this->data['AlertasCliente']['contenido'] = serialize($valores);
			unset($this->data['AlertasClienteContenido']);
		}
		else {
			$this->Session->setFlash('No fue posible agregar la nueva alerta.', 'error');	
			$this->redirect("index", null, true);
		}
		$this->data['AlertasCliente']['usuario_id'] = $usuario['Usuario']['id'];

		if($this->data['AlertasCliente']['notificacion1'] && $this->data['AlertasCliente']['destino1']) {
			$n['notificacion'] = $this->data['AlertasCliente']['notificacion1'];
			$n['destino'] = trim(str_replace(" ", "", $this->data['AlertasCliente']['destino1']));
			$n['enviarPrueba'] = $this->data['AlertasCliente']['enviarPrueba1'];
			$this->__enviarAlerta($n);
			$notificacion[] = $n;
		}
		if($this->data['AlertasCliente']['notificacion2'] && $this->data['AlertasCliente']['destino2']) {
			$n['notificacion'] = $this->data['AlertasCliente']['notificacion2'];
			$n['destino'] = trim(str_replace(" ", "", $this->data['AlertasCliente']['destino2']));
			$n['enviarPrueba'] = $this->data['AlertasCliente']['enviarPrueba2'];
			$this->__enviarAlerta($n);
			$notificacion[] = $n;
		}
		if($this->data['AlertasCliente']['notificacion3'] && $this->data['AlertasCliente']['destino3']) {
			$n['notificacion'] = $this->data['AlertasCliente']['notificacion3'];
			$n['destino'] = trim(str_replace(" ", "", $this->data['AlertasCliente']['destino3']));
			$n['enviarPrueba'] = $this->data['AlertasCliente']['enviarPrueba3'];
			$this->__enviarAlerta($n);
			$notificacion[] = $n;
		}
		if($this->data['AlertasCliente']['notificacion4'] && $this->data['AlertasCliente']['destino4']) {
			$n['notificacion'] = $this->data['AlertasCliente']['notificacion4'];
			$n['destino'] = trim(str_replace(" ", "", $this->data['AlertasCliente']['destino4']));
			$n['enviarPrueba'] = $this->data['AlertasCliente']['enviarPrueba4'];
			$this->__enviarAlerta($n);
			$notificacion[] = $n;
		}
		
		if(isset($notificacion))
			$this->data['AlertasClienteNotificacion'] = $notificacion;
		else {
			$this->Session->setFlash('No fue posible agregar la nueva alerta. No ha seleccionado ninguna forma de notificacion.', 'error');	
			$this->redirect("add", null, true);
		}
		unset($this->data['AlertasCliente']['notificacion1']);
		unset($this->data['AlertasCliente']['destino1']);
		unset($this->data['AlertasCliente']['notificacion2']);
		unset($this->data['AlertasCliente']['destino2']);
		unset($this->data['AlertasCliente']['notificacion3']);
		unset($this->data['AlertasCliente']['destino3']);
		unset($this->data['AlertasCliente']['notificacion4']);
		unset($this->data['AlertasCliente']['destino4']);
		//d($this->data);
	}
}
?>
